#include	<stdio.h>

#include    <stdlib.h>

#include    <string.h>

#include	<sys/types.h>

#include	<sys/stat.h>

#include	<dirent.h>


ino_t	get_inode(char *);

void    printpathto(ino_t);

void    inum_to_name(ino_t , char *, int );


int main()

{
	
printpathto( get_inode( "." ) );	
	
putchar('\n');				
	
return 0;

}


void printpathto( ino_t this_inode )

{
	
ino_t	my_inode ;
	
char	its_name[BUFSIZ];

	
if ( get_inode("..") != this_inode )
	
{
		
chdir( ".." );				

		
inum_to_name(this_inode,its_name,BUFSIZ);

		
my_inode = get_inode( "." );		
		
printpathto( my_inode );		
		
printf("/%s", its_name );		
							
	
}

}


void inum_to_name(ino_t inode_to_find , char *namebuf, int buflen)

{
	
DIR		*dir_ptr;		
	
struct dirent	*direntp;		

	
dir_ptr = opendir( "." );
	
if ( dir_ptr == NULL )
{
		
perror( "." );
		
exit(1);
	
}


	
while ( ( direntp = readdir( dir_ptr ) ) != NULL )
		
if ( direntp->d_ino == inode_to_find )
		
{
			
strncpy( namebuf, direntp->d_name, buflen);
			
namebuf[buflen-1] = '\0';   
			
closedir( dir_ptr );
			
return;
		
}
	
fprintf(stderr, "error looking for inum %d\n", (int) inode_to_find);
	
exit(1);

}


ino_t get_inode( char *fname )

{
	
struct stat info;

	
if ( stat( fname , &info ) == -1 )
{
		
fprintf(stderr, "Cannot stat ");
		
perror(fname);
		
exit(1);
	
}
	
return info.st_ino;

}
